# 胡子健天下第一
# 毋庸置疑
# 开发时间： 2021/3/4 8:39
#字典
'''
思考：如果有多个数据，例如：Tom,男，20，如何快速存储？
答：列表
list=['Tom','男'，20]
思考2：如何查找到数据’Tom’?
答：查找到下标为0的数据即可
list[0]
思考3：如果将来顺序发生变化，如下所示，还能用list1[0] 访问到数据Tom吗？
list1=['男',20,'Tom']
答：不能，数据Tom此时下标为2
思考4：数据顺序发生变化，每个数据的下表也会随之变化，如何保证数据顺序变化前后能使用同一的标准查找数据呢？
答：字典，字典里面的数据是以键值对形式出现，字典数据和数据顺序没有关系，即字典不支持下标，后期无论数据如何变化，
只要按照对应的键的名字查找数据即可
'''
#dict 字典是无序的对象集合，使用键-值（key-value）存储，具有极快的查找速度,有点类似于数据库key
'''
#同一个字典中（key）值是唯一的
info={'name':"女娲",'age':'18'} #字典的定义
#字典的使用
print(info['name'])
print(info['age'])

#访问了不存在的值

#print(info['father']) # j结果：KeyError: 'father' ，会直接报错
print(info.get('father')) #结果：None 显示的是没找到而不是报错，默认返回：NOne
print(info.get('father','没有找到')) #结果：没有找到 修改默认返回值
print(info.get('age','20')) #结果：18 找到了是不会返回默认值的

'''
#增
'''
info={'name':"女娲",'age':'18'} #字典的定义
newId=input('请输入一个新的Id：')
info['id']=newId
print(info['id']) #请输入一个新的Id：123 123,说明已经增添进去了
'''
#删

#【del】
#info={'name':"女娲",'age':'18'} #字典的定义
#print('删除前：',info['name']) #结果：删除前： 女娲
#del info['name']
#print('删除后：%s',info['name'])  #结果：KeyError: 'name' ，del删除的是整个dict，和元组del一样

#【clear】
'''
info={'name':"女娲",'age':'18'} #字典的定义
print('清空前：',info) #结果：清空前： {'name': '女娲', 'age': '18'}
info.clear('name')
print('清空后：',info)  #结果：clear() takes no arguments (1 given) ,所以是不能只清空某个键的
info.clear()
print('清空后：',info)  #结果：清空后： {}
'''
#改
'''
info={'name':"女娲",'age':'18'} #字典的定义
info['age']=20
print("输出：",info['age']) #输出： 20
'''
#查
'''
info={'id':1,'name':"女娲",'age':'18'} #字典的定义
print(info.keys()) #以列表的形式输处键
print(info.values()) #以列表的形式输处值
print(info.items()) #以列表的形式输处键值对

#遍历
for key in info.keys():
    print(key)
for value in info.values():
    print(value)
for key,value in info.items():
    print(key,value)
'''
#类似的当在列表中也可以如此处理
#使用枚举类型，同时拿到下标和元素内容
list={'a','b','d'}  #list是随机的吗？
for x in list:
    print(x)
for i,x in enumerate(list):
    print(i,x)
'''
字典的无序是指数据存进字典的顺序跟取出字典的顺序不一致

Python2的字典是无序的>>> d = {'a':-1,'b':-1,'c':-1}>>> d

{'a': -1, 'c': -1, 'b': -1}>>> for k,v in d.items():

... print k,v

...

a -1c -1b -1

那如何保持字典有序呢？使用OrderedDict>>> from collections import OrderedDict

>>> d = OrderedDict()

>>> d['a'] = 1

>>> d['b'] = 2

>>> d['c'] = 3

>>> d

OrderedDict([('a', 1), ('b', 2), ('c', 3)])

>>> for k,v in d.items():

... print k,v

...

a 1

b 2

c 3

那为什么会是无序的呢？哈希结构会有一个head地址，里面的数据会分散到不同的列表链，所以看似是无序的，但对于同一组字典，总需要有一个标识去连结，所以读取时也会按存储顺序取数据，只是不会按特定规则排列。

Python3中字典是有序的>>> d = {'a':-1,'b':-1,'c':-1}

>>> d

{'a': -1, 'b': -1, 'c': -1}

>>> for k,v in d.items():

... print(k,v)

...

a -1

b -1

c -1

'''